home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / circuits / spice2g6.z / spice2g6 / spice / Fortran / elprnt.f < prev    next >
Encoding:
Text File  |  1989-02-03  |  13.7 KB  |  425 lines

  1.       subroutine elprnt
  2.       implicit double precision (a-h,o-z)
  3. c
  4. c     this routine prints a circuit element summary.
  5. c
  6. c spice version 2g.6  sccsid=tabinf 3/15/83
  7.       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
  8.      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
  9.      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
  10.      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
  11.      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
  12.      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval,
  13.      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt,
  14.      7   irowno,jcolno,nttbr,nttar,lvntmp
  15. c spice version 2g.6  sccsid=miscel 3/15/83
  16.       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
  17.      1  defas,rstats(50),iwidth,lwidth,nopage
  18. c spice version 2g.6  sccsid=cirdat 3/15/83
  19.       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
  20.      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs,numalt,numcyc
  21. c spice version 2g.6  sccsid=flags 3/15/83
  22.       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
  23.      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,itl6,igoof,nogo,keof
  24. c spice version 2g.6  sccsid=tran 3/15/83
  25.       common /tran/ tstep,tstop,tstart,delmax,tdmax,forfre,jtrflg
  26. c spice version 2g.6  sccsid=blank 3/15/83
  27.       common /blank/ value(200000)
  28. c spice version 2g.6  sccsid=status 3/15/83
  29.       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
  30.      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon,
  31.      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile
  32.       integer nodplc(64)
  33.       complex cvalue(32)
  34.       equivalence (value(1),nodplc(1),cvalue(1))
  35. c
  36. c
  37.       dimension itab(25),astyp(6)
  38.       dimension eltitl(4)
  39.       data eltitl / 8hcircuit , 8helement , 8hsummary , 8h         /
  40.       data astyp / 1h , 5hpulse, 3hsin, 3hexp, 3hpwl, 4hsffm /
  41.       data ablnk,aoff /1h ,3hoff/
  42. c
  43. c  print listing of elements
  44. c
  45.       call title(0,lwidth,1,eltitl)
  46. c
  47. c  print resistors
  48. c
  49.       if (jelcnt(1).eq.0) go to 50
  50.       ititle=0
  51.    21 format(//'0**** resistors'/'0     name        nodes     value
  52.      1  tc1        tc2'//)
  53.       loc=locate(1)
  54.    30 if ((loc.eq.0).or.(nodplc(loc+8).ne.0)) go to 50
  55.       if (ititle.eq.0) write (iofile,21)
  56.       ititle=1
  57.       locv=nodplc(loc+1)
  58.       node1=nodplc(loc+2)
  59.       node2=nodplc(loc+3)
  60.       write (iofile,31) value(locv),nodplc(junode+node1),
  61.      1   nodplc(junode+node2),value(locv+2),value(locv+3),value(locv+4)
  62.    31 format(6x,a8,2i5,1p3d11.2)
  63.    40 loc=nodplc(loc)
  64.       go to 30
  65. c
  66. c  print capacitors and inductors
  67. c
  68.    50 if ((jelcnt(2)+jelcnt(3)).eq.0) go to 80
  69.       ititle=0
  70.    51 format(//'0**** capacitors and inductors'/'0     name        nodes
  71.      1    in cond     value'//)
  72.       do 70 id=2,3
  73.       loc=locate(id)
  74.    60 if (loc.eq.0) go to 70
  75.       if ((id.eq.2).and.(nodplc(loc+12).ne.0)) go to 70
  76.       if ((id.eq.3).and.(nodplc(loc+14).ne.0)) go to 70
  77.       if (ititle.eq.0) write (iofile,51)
  78.       ititle=1
  79.       locv=nodplc(loc+1)
  80.       node1=nodplc(loc+2)
  81.       node2=nodplc(loc+3)
  82.       if (nodplc(loc+4).ne.1) go to 62
  83.       write (iofile,31) value(locv),nodplc(junode+node1),
  84.      1   nodplc(junode+node2),value(locv+2),value(locv+1)
  85.       go to 65
  86.    62 ltab=7
  87.       if (id.eq.3) ltab=10
  88.       call sizmem(nodplc(loc+ltab),nparam)
  89.       ispot=nodplc(loc+ltab)+1
  90.       write (iofile,63) value(locv),nodplc(junode+node1),
  91.      1   nodplc(junode+node2),value(locv+2)
  92.    63 format(6x,a8,2i5,1pd11.2,'   variable')
  93.    65 loc=nodplc(loc)
  94.       go to 60
  95.    70 continue
  96. c
  97. c  print mutual inductors
  98. c
  99.    80 if (jelcnt(4).eq.0) go to 100
  100.       ititle=0
  101.    81 format(//'0**** mutual inductors'/'0     name        coupled induc
  102.      1tors   value'//)
  103.       loc=locate(4)
  104.    90 if ((loc.eq.0).or.(nodplc(loc+6).ne.0)) go to 110
  105.       if (ititle.eq.0) write (iofile,81)
  106.       ititle=1
  107.       locv=nodplc(loc+1)
  108.       nl1=nodplc(loc+2)
  109.       nl1=nodplc(nl1+1)
  110.       nl2=nodplc(loc+3)
  111.       nl2=nodplc(nl2+1)
  112.       write (iofile,91) value(locv),value(nl1),value(nl2),value(locv+1)
  113.    91 format(6x,a8,4x,a8,2x,a8,1pd10.2)
  114.    95 loc=nodplc(loc)
  115.       go to 90
  116. c
  117. c  print nonlinear voltage controlled sources
  118. c
  119.   100 if (jelcnt(5).eq.0) go to 120
  120.       ititle=0
  121.   101 format(//'0**** voltage-controlled current sources'/'0     name
  122.      1     +    -   dimension   function')
  123.       loc=locate(5)
  124.   110 if ((loc.eq.0).or.(nodplc(loc+13).ne.0)) go to 120
  125.       if (ititle.eq.0) write (iofile,101)
  126.       ititle=1
  127.       locv=nodplc(loc+1)
  128.       node1=nodplc(loc+2)
  129.       node2=nodplc(loc+3)
  130.       write (iofile,111) value(locv),nodplc(junode+node1),
  131.      1   nodplc(junode+node2),nodplc(loc+4)
  132.   111 format(6x,a8,2i5,i8,9x,'poly')
  133.   115 loc=nodplc(loc)
  134.       go to 110
  135. c
  136. c  nonlinear voltage controlled voltage sources
  137. c
  138.   120 if (jelcnt(6).eq.0) go to 140
  139.       ititle=0
  140.   121 format(//'0**** voltage-controlled voltage sources'/'0     name
  141.      1     +    -   dimension   function')
  142.       loc=locate(6)
  143.   130 if ((loc.eq.0).or.(nodplc(loc+14).ne.0)) go to 140
  144.       if (ititle.eq.0) write (iofile,121)
  145.       ititle=1
  146.       locv=nodplc(loc+1)
  147.       node1=nodplc(loc+2)
  148.       node2=nodplc(loc+3)
  149.       write (iofile,111) value(locv),nodplc(junode+node1),
  150.      1   nodplc(junode+node2),nodplc(loc+4)
  151.   135 loc=nodplc(loc)
  152.       go to 130
  153. c
  154. c  nonlinear current controlled current sources
  155. c
  156.   140 if (jelcnt(7).eq.0) go to 160
  157.       ititle=0
  158.   141 format(//'0**** current-controlled current sources'/'0     name
  159.      1     +    -   dimension   function')
  160.       loc=locate(7)
  161.   150 if ((loc.eq.0).or.(nodplc(loc+13).ne.0)) go to 160
  162.       if (ititle.eq.0) write (iofile,141)
  163.       ititle=1
  164.       locv=nodplc(loc+1)
  165.       node1=nodplc(loc+2)
  166.       node2=nodplc(loc+3)
  167.       write (iofile,111) value(locv),nodplc(junode+node1),
  168.      1   nodplc(junode+node2),nodplc(loc+4)
  169.   155 loc=nodplc(loc)
  170.       go to 150
  171. c
  172. c  nonlinear current controlled voltage sources
  173. c
  174.   160 if (jelcnt(8).eq.0) go to 170
  175.       ititle=0
  176.   161 format(//'0**** current-controlled voltage sources'/'0     name
  177.      1     +    -   dimension   function')
  178.       loc=locate(8)
  179.   165 if ((loc.eq.0).or.(nodplc(loc+14).ne.0)) go to 170
  180.       if (ititle.eq.0) write (iofile,161)
  181.       ititle=1
  182.       locv=nodplc(loc+1)
  183.       node1=nodplc(loc+2)
  184.       node2=nodplc(loc+3)
  185.       write (iofile,111) value(locv),nodplc(junode+node1),
  186.      1   nodplc(junode+node2),nodplc(loc+4)
  187.   167 loc=nodplc(loc)
  188.       go to 165
  189. c
  190. c  print independent sources
  191. c
  192.   170 if ((jelcnt(9)+jelcnt(10)).eq.0) go to 250
  193.       ititle=0
  194.   171 format(//'0**** independent sources'/'0     name        nodes   dc
  195.      1 value   ac value   ac phase   transient'//)
  196.       do 245 id=9,10
  197.       loc=locate(id)
  198.   180 if (loc.eq.0) go to 245
  199.       if ((id.eq.9).and.(nodplc(loc+11).ne.0)) go to 245
  200.       if ((id.eq.10).and.(nodplc(loc+6).ne.0)) go to 245
  201.       if (ititle.eq.0) write (iofile,171)
  202.       ititle=1
  203.       locv=nodplc(loc+1)
  204.       locp=nodplc(loc+5)
  205.       node1=nodplc(loc+2)
  206.       node2=nodplc(loc+3)
  207.       itype=nodplc(loc+4)+1
  208.       anam=astyp(itype)
  209.       write (iofile,181) value(locv),nodplc(junode+node1),
  210.      1   nodplc(junode+node2),value(locv+1),value(locv+2),
  211.      2   value(locv+3),anam
  212.   181 format(6x,a8,2i5,1p3d11.2,2x,a8)
  213.       if (jtrflg.eq.0) go to 240
  214.       jstart=locp+1
  215.       go to (240,190,200,210,220,230), itype
  216.   190 jstop=locp+7
  217.       write (iofile,191) (value(j),j=jstart,jstop)
  218.   191 format(1h0,42x,'initial value',1pd11.2,/,
  219.      1           43x,'pulsed value.',  d11.2,/,
  220.      2           43x,'delay time...',  d11.2,/,
  221.      3           43x,'risetime.....',  d11.2,/,
  222.      4           43x,'falltime.....',  d11.2,/,
  223.      5           43x,'width........',  d11.2,/,
  224.      6           43x,'period.......',  d11.2,/)
  225.       go to 240
  226.   200 jstop=locp+5
  227.       write (iofile,201) (value(j),j=jstart,jstop)
  228.   201 format(1h0,42x,'offset.......',1pd11.2,/,
  229.      1           43x,'amplitude....',  d11.2,/,
  230.      2           43x,'frequency....',  d11.2,/,
  231.      3           43x,'delay........',  d11.2,/,
  232.      4           43x,'theta........',  d11.2,/)
  233.       go to 240
  234.   210 jstop=locp+6
  235.       write (iofile,211) (value(j),j=jstart,jstop)
  236.   211 format(1h0,42x,'initial value',1pd11.2,/,
  237.      1           43x,'pulsed value.',  d11.2,/,
  238.      2           43x,'rise delay...',  d11.2,/,
  239.      3           43x,'rise tau.....',  d11.2,/,
  240.      4           43x,'fall delay...',  d11.2,/,
  241.      5           43x,'fall tau.....',  d11.2,/)
  242.       go to 240
  243.   220 call sizmem(nodplc(loc+5),jstop)
  244.       jstop=locp+jstop
  245.       write (iofile,221) (value(j),j=jstart,jstop)
  246.   221 format(1h0,49x,'time       value'//,(46x,1p2d11.2))
  247.       write (iofile,226)
  248.   226 format(1x)
  249.       go to 240
  250.   230 jstop=locp+5
  251.       write (iofile,231) (value(j),j=jstart,jstop)
  252.   231 format(1h0,42x,'offset.......',1pd11.2,/,
  253.      1           43x,'amplitude....',  d11.2,/,
  254.      2           43x,'carrier freq.',  d11.2,/,
  255.      3           43x,'modn index...',  d11.2,/,
  256.      4           43x,'signal freq..',  d11.2,/)
  257.   240 loc=nodplc(loc)
  258.       go to 180
  259.   245 continue
  260. c
  261. c  print transmission lines
  262. c
  263.   250 if (jelcnt(17).eq.0) go to 260
  264.       ititle=0
  265.   251 format(//'0**** transmission lines'/'0     name             nodes
  266.      1           z0         td'//)
  267.       loc=locate(17)
  268.   253 if ((loc.eq.0).or.(nodplc(loc+33).ne.0)) go to 260
  269.       if (ititle.eq.0) write (iofile,251)
  270.       ititle=1
  271.       locv=nodplc(loc+1)
  272.       node1=nodplc(loc+2)
  273.       node2=nodplc(loc+3)
  274.       node3=nodplc(loc+4)
  275.       node4=nodplc(loc+5)
  276.       write (iofile,256) value(locv),nodplc(junode+node1),
  277.      1   nodplc(junode+node2),nodplc(junode+node3),
  278.      2   nodplc(junode+node4),value(locv+1),value(locv+2)
  279.   256 format(6x,a8,4i5,1p2d11.2)
  280.   258 loc=nodplc(loc)
  281.       go to 253
  282. c
  283. c  print diodes
  284. c
  285.   260 if (jelcnt(11).eq.0) go to 290
  286.       ititle=0
  287.   261 format(//'0**** diodes'/'0     name        +    -  model       are
  288.      1a'//)
  289.       loc=locate(11)
  290.   270 if ((loc.eq.0).or.(nodplc(loc+16).ne.0)) go to 290
  291.       if (ititle.eq.0) write (iofile,261)
  292.       ititle=1
  293.       locv=nodplc(loc+1)
  294.       node1=nodplc(loc+2)
  295.       node2=nodplc(loc+3)
  296.       locm=nodplc(loc+5)
  297.       locm=nodplc(locm+1)
  298.       aic=ablnk
  299.       if (nodplc(loc+6).eq.1) aic=aoff
  300.       write (iofile,271) value(locv),nodplc(junode+node1),
  301.      1   nodplc(junode+node2),value(locm),value(locv+1),aic
  302.   271 format(6x,a8,2i5,2x,a8,f8.3,2x,a8)
  303.   280 loc=nodplc(loc)
  304.       go to 270
  305. c
  306. c  print transistors
  307. c
  308.   290 if (jelcnt(12).eq.0) go to 320
  309.       ititle=0
  310.   291 format(//'0**** bipolar junction transistors'/'0     name        c
  311.      1    b    e    s  model       area'//)
  312.       loc=locate(12)
  313.   300 if ((loc.eq.0).or.(nodplc(loc+36).ne.0)) go to 320
  314.       if (ititle.eq.0) write (iofile,291)
  315.       ititle=1
  316.       locv=nodplc(loc+1)
  317.       node1=nodplc(loc+2)
  318.       node2=nodplc(loc+3)
  319.       node3=nodplc(loc+4)
  320.       node4=nodplc(loc+5)
  321.       locm=nodplc(loc+8)
  322.       locm=nodplc(locm+1)
  323.       aic=ablnk
  324.       if (nodplc(loc+9).eq.1) aic=aoff
  325.       write (iofile,301) value(locv),nodplc(junode+node1),
  326.      1   nodplc(junode+node2),nodplc(junode+node3),nodplc(junode+node4),
  327.      2   value(locm),value(locv+1),aic
  328.   301 format(6x,a8,4i5,2x,a8,f8.3,2x,a8)
  329.   310 loc=nodplc(loc)
  330.       go to 300
  331. c
  332. c  print jfets
  333. c
  334.   320 if (jelcnt(13).eq.0) go to 350
  335.       ititle=0
  336.   321 format(//'0**** jfets'/'0     name        d    g    s  model
  337.      1 area'//)
  338.       loc=locate(13)
  339.   330 if ((loc.eq.0).or.(nodplc(loc+25).ne.0)) go to 350
  340.       if (ititle.eq.0) write (iofile,321)
  341.       ititle=1
  342.       locv=nodplc(loc+1)
  343.       node1=nodplc(loc+2)
  344.       node2=nodplc(loc+3)
  345.       node3=nodplc(loc+4)
  346.       locm=nodplc(loc+7)
  347.       locm=nodplc(locm+1)
  348.       aic=ablnk
  349.       if (nodplc(loc+8).eq.1) aic=aoff
  350.       write (iofile,331) value(locv),nodplc(junode+node1),
  351.      1   nodplc(junode+node2),nodplc(junode+node3),
  352.      2   value(locm),value(locv+1),aic
  353.   331 format(6x,a8,3i5,2x,a8,f8.3,2x,a8)
  354.   340 loc=nodplc(loc)
  355.       go to 330
  356. c
  357. c  print mosfets
  358. c
  359.   350 if (jelcnt(14).eq.0) go to 400
  360.       ititle=0
  361.   351 format(//'0**** mosfets',/,'0name',6x,'d   g   s   b  model',6x,
  362.      1      'w       ad       pd      rds'/
  363.      2  37x,'l       as       ps      rss',//)
  364.       loc=locate(14)
  365.   360 if ((loc.eq.0).or.(nodplc(loc+33).ne.0)) go to 400
  366.       if (ititle.eq.0) write (iofile,351)
  367.       ititle=1
  368.       locv=nodplc(loc+1)
  369.       node1=nodplc(loc+2)
  370.       node2=nodplc(loc+3)
  371.       node3=nodplc(loc+4)
  372.       node4=nodplc(loc+5)
  373.       locm=nodplc(loc+8)
  374.       locm=nodplc(locm+1)
  375.       aic=ablnk
  376.       if (nodplc(loc+9).eq.1) aic=aoff
  377.       write (iofile,361) value(locv),nodplc(junode+node1),
  378.      1   nodplc(junode+node2),nodplc(junode+node3),
  379.      2   nodplc(junode+node4),value(locm),value(locv+2),
  380.      3   value(locv+3),value(locv+11),value(locv+13),
  381.      4   value(locv+1),value(locv+4),value(locv+12),value(locv+14),aic
  382.   361 format(1x,a8,4i4,1x,a8,1p4d8.1,/34x,1p4d8.1,1x,a8)
  383.   370 loc=nodplc(loc)
  384.       go to 360
  385. c
  386. c  subcircuit calls
  387. c
  388.   400 if (jelcnt(19).eq.0) go to 500
  389.       ititle=0
  390.   401 format(//'0**** subcircuit calls'/'0     name     subcircuit   ext
  391.      1ernal nodes'//)
  392.       loc=locate(19)
  393.   410 if (loc.eq.0) go to 500
  394.       if (ititle.eq.0) write (iofile,401)
  395.       ititle=1
  396.       locv=nodplc(loc+1)
  397.       locn=nodplc(loc+2)
  398.       call sizmem(nodplc(loc+2),nnodx)
  399.       locs=nodplc(loc+3)
  400.       locsv=nodplc(locs+1)
  401.       jstart=1
  402.       ndprln=(lwidth-28)/5
  403.   412 jstop=min0(nnodx,jstart+ndprln-1)
  404.       do 414 j=jstart,jstop
  405.       node=nodplc(locn+j)
  406.       itab(j-jstart+1)=nodplc(junode+node)
  407.   414 continue
  408.       if (jstart.eq.1)
  409.      1   write (iofile,416) value(locv),value(locsv),(itab(j),j=1,jstop)
  410.   416 format(6x,a8,2x,a8,4x,20i5)
  411.       if (jstart.ne.1)
  412.      1   write (iofile,418) (itab(j-jstart+1),j=jstart,jstop)
  413.   418 format(28x,20i5)
  414.       jstart=jstop+1
  415.       if (jstart.le.nnodx) go to 412
  416.       if (nnodx.le.ndprln) go to 420
  417.       write (iofile,226)
  418.   420 loc=nodplc(loc)
  419.       go to 410
  420. c
  421. c  finished
  422. c
  423.   500 return
  424.       end
  425.